// Package _2_两个链表的第一个公共节点 main
// @Title _2_两个链表的第一个公共节点
// @Description
// @Author  == 琳琳也叫王木木 ==  2022-01-13 19:55
// @Create  2022-01-13 19:55
package main

type ListNode struct {
	Val  int
	Next *ListNode
}

func main() {

}

//
//  getIntersectionNode
//  @Description: 获取两个链表的第一个公共的节点 （用哈希表）
//  @param headA：第一个链表的头结点
//  @param headB：第二个链表的头节点
//  @return *ListNode：公共相交的起始节点
//
func getIntersectionNode(headA, headB *ListNode) *ListNode {
	if headB == nil || headA == nil {
		return nil
	}
	hashList := make(map[*ListNode]int)
	p1 := headA
	p2 := headB
	for p1 != nil {
		if _, ok := hashList[p1]; ok {
			return p1
		} else {
			hashList[p1] = p1.Val
		}
		p1 = p1.Next
	}
	for p2 != nil {
		if _, ok := hashList[p2]; ok {
			return p2
		}
		p2 = p2.Next
	}
	return nil
}
